#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
char * concatenate(int v, ...);

int main() {
    char *a, *b, *c;
    a= concatenate(4, "alpha ", "beta ", "gamma ", "delta");
    printf("%s\n", a);

    b= concatenate(1, "Hello, world!");
    printf("%s\n", b);

    c= concatenate(6, "f", "o", "o", "b", "a", "r");
    printf("%s\n", c);

    free(a); free(b); free(c);
    return 0;
}

char * concatenate(int v, ...) {
    va_list va; 
    int x;
    char *r, *tmp;

    va_start(va, v);
    for (x= 0; x<v; ++x) {
        tmp= va_arg(va, char *);
        if (x == 0) {
            r= malloc(sizeof(char *) * strlen(tmp) + 1);
            if (r == NULL)
                return NULL;
            strcpy(r, tmp);

        } else {
            r= realloc(r, sizeof(char *) * (strlen(r) + strlen(tmp)) + 1);
            if (r == NULL)
                return NULL;
            strcat(r, tmp);
        }
    }
    va_end(va);
    return r;
}
